﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Collections.ObjectModel;

namespace DnDCharacterBuilder
{
    [Serializable]
    public abstract class CharRace
    {
        public string Name { set; get; }

        public int StrBonus { set; get; }
        public int ConBonus { get; set; }
        public int DexBonus { get; set; }
        public int IntelBonus { get; set; }
        public int WisBonus { get; set; }
        public int CharaBonus { get; set; }

        public int FortBonus { set; get; }
        public int ReflexBonus { set; get; }
        public int WillBonus { set; get; }

        public int AcrobaticsBonus { set; get; }
        public int ArcanaBonus { set; get; }
        public int AthleticsBonus { set; get; }
        public int BluffBonus { set; get; }
        public int DiplomacyBonus { set; get; }
        public int DungeoneeringBonus { set; get; }
        public int EnduranceBonus { set; get; }
        public int HealBonus { set; get; }
        public int HistoryBonus { set; get; }
        public int InsightBonus { set; get; }
        public int IntimidateBonus { set; get; }
        public int NatureBonus { set; get; }
        public int PerceptionBonus { set; get; }
        public int ReligionBonus { set; get; }
        public int StealthBonus { set; get; }
        public int StreetwiseBonus { set; get; }
        public int ThieveryBonus { set; get; }

        public int Speed { set; get; }
        public string Vision { set; get; }       
        public string Size { set; get; }
        

    }

    [Serializable]
    public class DragonBornRace : CharRace
    {
        public DragonBornRace()
        {
            Name = "DragonBorn";

            StrBonus = 2;
            ConBonus = 0;
            DexBonus = 0;
            IntelBonus = 0;
            WisBonus = 0;
            CharaBonus = 2;

            FortBonus = 0;
            ReflexBonus = 0;
            WillBonus = 0;

            AcrobaticsBonus = 0;
            ArcanaBonus = 0;
            AthleticsBonus = 0;
            BluffBonus = 0;
            DiplomacyBonus = 0;
            DungeoneeringBonus = 0;
            EnduranceBonus = 0;
            HealBonus = 0;
            HistoryBonus = 2;
            InsightBonus = 0;
            IntimidateBonus = 2;
            NatureBonus = 0;
            PerceptionBonus = 0;
            ReligionBonus = 0;
            StealthBonus = 0;
            StreetwiseBonus = 0;
            ThieveryBonus = 0;

            Speed = 6; 
            Vision = "Normal";
            Size = "Medium";
        }
    }
    
    [Serializable]
    public class DwarfRace : CharRace
    {
        public DwarfRace()
        {
            Name = "Dwarf";

            StrBonus = 0;
            ConBonus = 2;
            DexBonus = 0;
            IntelBonus = 0;
            WisBonus = 2;
            CharaBonus = 0;

            FortBonus = 0;
            ReflexBonus = 0;
            WillBonus = 0;

            AcrobaticsBonus = 0;
            ArcanaBonus = 0;
            AthleticsBonus = 0;
            BluffBonus = 0;
            DiplomacyBonus = 0;
            DungeoneeringBonus = 2;
            EnduranceBonus = 2;
            HealBonus = 0;
            HistoryBonus = 0;
            InsightBonus = 0;
            IntimidateBonus = 0;
            NatureBonus = 0;
            PerceptionBonus = 0;
            ReligionBonus = 0;
            StealthBonus = 0;
            StreetwiseBonus = 0;
            ThieveryBonus = 0;

            Speed = 5;
            Vision = "Low-Light";
            Size = "Medium";
        }
    }

    [Serializable]
    public class EladrinRace : CharRace
    {
        public EladrinRace()
        {
            Name = "Eladrin";

            StrBonus = 0;
            ConBonus = 0;
            DexBonus = 2;
            IntelBonus = 2;
            WisBonus = 0;
            CharaBonus = 0;

            FortBonus = 0;
            ReflexBonus = 0;
            WillBonus = 1;

            AcrobaticsBonus = 0;
            ArcanaBonus = 2;
            AthleticsBonus = 0;
            BluffBonus = 0;
            DiplomacyBonus = 0;
            DungeoneeringBonus = 0;
            EnduranceBonus = 0;
            HealBonus = 0;
            HistoryBonus = 2;
            InsightBonus = 0;
            IntimidateBonus = 0;
            NatureBonus = 0;
            PerceptionBonus = 0;
            ReligionBonus = 0;
            StealthBonus = 0;
            StreetwiseBonus = 0;
            ThieveryBonus = 0;

            Speed = 6;
            Vision = "Low-Light";
            Size = "Medium";
        }
    }

    [Serializable]
    public class ElfRace : CharRace
    {
        public ElfRace()
        {
            Name = "Elf";

            StrBonus = 0;
            ConBonus = 0;
            DexBonus = 2;
            IntelBonus = 0;
            WisBonus = 2;
            CharaBonus = 0;

            FortBonus = 0;
            ReflexBonus = 0;
            WillBonus = 0;

            AcrobaticsBonus = 0;
            ArcanaBonus = 0;
            AthleticsBonus = 0;
            BluffBonus = 0;
            DiplomacyBonus = 0;
            DungeoneeringBonus = 0;
            EnduranceBonus = 0;
            HealBonus = 0;
            HistoryBonus = 0;
            InsightBonus = 0;
            IntimidateBonus = 0;
            NatureBonus = 2;
            PerceptionBonus = 2;
            ReligionBonus = 0;
            StealthBonus = 0;
            StreetwiseBonus = 0;
            ThieveryBonus = 0;

            Speed = 7;
            Vision = "Low-Light";
            Size = "Medium";
        }
    }

    [Serializable]
    public class HalfElfRace : CharRace
    {
        public HalfElfRace()
        {
            Name = "Half-Elf";

            StrBonus = 0;
            ConBonus = 2;
            DexBonus = 0;
            IntelBonus = 0;
            WisBonus = 0;
            CharaBonus = 2;

            FortBonus = 0;
            ReflexBonus = 0;
            WillBonus = 0;

            AcrobaticsBonus = 0;
            ArcanaBonus = 0;
            AthleticsBonus = 0;
            BluffBonus = 0;
            DiplomacyBonus = 2;
            DungeoneeringBonus = 0;
            EnduranceBonus = 0;
            HealBonus = 0;
            HistoryBonus = 0;
            InsightBonus = 2;
            IntimidateBonus = 0;
            NatureBonus = 0;
            PerceptionBonus = 0;
            ReligionBonus = 0;
            StealthBonus = 0;
            StreetwiseBonus = 0;
            ThieveryBonus = 0;

            Speed = 6;
            Vision = "Low-Light";
            Size = "Medium";
        }
    }

    [Serializable]
    public class HalflingRace : CharRace
    {
        public HalflingRace()
        {
            Name = "Halfling";

            StrBonus = 0;
            ConBonus = 0;
            DexBonus = 2;
            IntelBonus = 0;
            WisBonus = 0;
            CharaBonus = 2;

            FortBonus = 0;
            ReflexBonus = 0;
            WillBonus = 0;

            AcrobaticsBonus = 2;
            ArcanaBonus = 0;
            AthleticsBonus = 0;
            BluffBonus = 0;
            DiplomacyBonus = 0;
            DungeoneeringBonus = 0;
            EnduranceBonus = 0;
            HealBonus = 0;
            HistoryBonus = 0;
            InsightBonus = 0;
            IntimidateBonus = 0;
            NatureBonus = 0;
            PerceptionBonus = 0;
            ReligionBonus = 0;
            StealthBonus = 0;
            StreetwiseBonus = 0;
            ThieveryBonus = 2;

            Speed = 6; 
            Vision = "Normal";
            Size = "Small";
        }
    }

    [Serializable]
    public class HumanRace : CharRace
    {
        public HumanRace()
        {
            Name = "Human";

            StrBonus = 0;
            ConBonus = 0;
            DexBonus = 0;
            IntelBonus = 0;
            WisBonus = 0;
            CharaBonus = 0;

            FortBonus = 1;
            ReflexBonus = 1;
            WillBonus = 1;

            AcrobaticsBonus = 0;
            ArcanaBonus = 0;
            AthleticsBonus = 0;
            BluffBonus = 0;
            DiplomacyBonus = 0;
            DungeoneeringBonus = 0;
            EnduranceBonus = 0;
            HealBonus = 0;
            HistoryBonus = 0;
            InsightBonus = 0;
            IntimidateBonus = 0;
            NatureBonus = 0;
            PerceptionBonus = 0;
            ReligionBonus = 0;
            StealthBonus = 0;
            StreetwiseBonus = 0;
            ThieveryBonus = 0;

            Speed = 6; 
            Vision = "Normal";
            Size = "Medium";
        }
    }

    [Serializable]
    public class TieflingRace : CharRace
    {
        public TieflingRace()
        {
            Name = "Tiefling";

            StrBonus = 0;
            ConBonus = 0;
            DexBonus = 0;
            IntelBonus = 2;
            WisBonus = 0;
            CharaBonus = 2;

            FortBonus = 0;
            ReflexBonus = 0;
            WillBonus = 0;

            AcrobaticsBonus = 0;
            ArcanaBonus = 0;
            AthleticsBonus = 0;
            BluffBonus = 2;
            DiplomacyBonus = 0;
            DungeoneeringBonus = 0;
            EnduranceBonus = 0;
            HealBonus = 0;
            HistoryBonus = 0;
            InsightBonus = 0;
            IntimidateBonus = 0;
            NatureBonus = 0;
            PerceptionBonus = 0;
            ReligionBonus = 0;
            StealthBonus = 2;
            StreetwiseBonus = 0;
            ThieveryBonus = 0;

            Speed = 6;
            Vision = "Low-Light";
            Size = "Medium";
        }
    }
    
}
